[GASで無料でやる]送付先ごとに別ファイルを添付して一斉メール送信するレシピ
やりたいこと
メールの一斉送信を行ってくれる無料サービスやプラグインは世の中にたくさんあるのですが、送信先ごとに異なるファイルを添付して一斉送信したいケースってあると思います。
例えば「毎月数百人のお客様にそれぞれインボイスを添付して送りたい」とか。
有料のCRMなどではこういった機能もあるはずですが、意地でも無料で実現したい。クレジットカードを登録したくない。そういった時に手頃な外部サービスがないようなので、Google Apps Scriptで自作してみました。
材料
- Google Spreadsheet 1枚
- Google Apps Script 35行程度
- Google Drive(添付ファイルを置いておくため)
1. Google Spreadsheetの準備
Google Spreadsheetを用意します。 必要なのは4カラム(Flagは明示的に送りたくない時にだけ使いますのでオマケです)。
A列のInvoice
は添付するファイル名です。Google Apps Script(以下GAS)がGoogle Driveから合致するファイルを探してきてくれるため、ユニークな名前である必要があります。
2. Google Driveにファイルをアップロード
上記SpreadsheetのA列に記載した画像名と同じ名前でGoogle Driveにファイルをアップロードします。 ファイル名がユニークであれば、パスを指定しなくてもGoogleが勝手に検索してくれます。かしこき。
3. Google Apps Scriptを書く
GASのコードです。
function send_invoice() {
var spreadsheet = SpreadsheetApp.openById('{speadsheet_id_here}'); //SpreadsheetのID
var sheet = spreadsheet.getSheetByName('send'); //シート名
var lastRow = sheet.getLastRow();
for(var i = 2; i <= lastRow; i ) {
//getRangeの第1引数は行(1,2,3..)、第2引数はカラム(A,B,C...の順番を数値にしたもの)
var filename = sheet.getRange(i,1).getValue()
var report = DriveApp.getFilesByName(filename).next();
var to = sheet.getRange(i,2).getValue();
var name = sheet.getRange(i,3).getValue();
var flag = sheet.getRange(i,4).getValue();
if (flag != "NO"){
var title = "メール件名";
var content =
name "様\n"
"いつも大変お世話になっております。\n"
"添付にて今月のインボイスをお送りいたします。\n\n"
"どうぞよろしくお願いいたします。"
;
GmailApp.sendEmail(
to,
title,
content,
{attachments: [report],
//fromをGmail以外にする際は紐付けが必要。下記で説明。
from: 'email@example.com',
cc: 'email@example.com',
replyTo: 'email@example.com',
name: 'My name here'
}
);
if (to == "") {
break;
}
}
}
}
最後に、GASのページから実行ボタンを押すだけです。初回のコード実行時に、いくつかPermissionのポップアップが出てくると思いますので許可してください。
Gmail以外からメールを送信したい時
Gmailアドレスではなく、外部メールアドレス(例えば会社ドメインなど)で送信したい場合、Googleアカウントへの紐付けが必要です。
別のアドレスやエイリアスからメールを送信する https://support.google.com/mail/answer/22370?hl=ja
上記を設定していないと、GmailApp.sendEmail
関数呼び出しの際にfromオプションが設定されていても、実行中のGmailアカウントから送られてしまいます。
さいごに
上記でだいたい基本的な処理はカバーしているはず。 "送信処理が完了したらSpreadsheet側にステータスを書き加えていく"等の処理を追加すれば、エラーによる配布漏れなども拾うことができるので、より確実奈ワークフローになるかと思います。
Google Apps Scriptは無料にも関わらず、Gmailやスプレッドシートとの手厚い連携のおかげで、そこらの有料ツールを置き換えてしまう万能性があります。
日々の業務効率を上げるために覚えておいて損はない、Google Apps Scriptの話でした。